"""
auth:xgt-python
datetime:2021/11/2
python-桌面应用程序开发
"""
import tkinter as tk
from tkinter import messagebox, filedialog
import os

root = tk.Tk()
root.title('搜索工具')
root.geometry('600x300')

"""搜索内容 从左到右布局"""
search_frame = tk.Frame()
search_frame.pack()

# padding 边框
tk.Label(search_frame, text='关键字:').pack(side=tk.LEFT, padx=10, pady=10)
key_entry = tk.Entry(search_frame)
key_entry.pack(side=tk.LEFT, padx=10, pady=10)

tk.Label(search_frame, text='文件类型:').pack(side=tk.LEFT, padx=10, pady=10)
type_entry = tk.Entry(search_frame)
type_entry.pack(side=tk.LEFT, padx=10, pady=10)

# 按钮
search_button = tk.Button(search_frame, text='搜素:', bg='red')
search_button.pack(side=tk.LEFT, padx=10, pady=10)
# 把搜素的内容文件插入到列表盒子里面去
list_box = tk.Listbox(root, width=80)
list_box.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)


def search():
    print('按钮被点击了')
    # 点击按钮获取输入的数据
    key = key_entry.get()
    file_type = type_entry.get()
    print('搜索关键字:', key)
    print('文件类型:', file_type)
    if not key:
        messagebox.showinfo(title='出错了', message='请输入关键字:')
        return
    if not file_type:
        messagebox.showinfo(title='出错了', message='请输入关键字:')
        return
    # 获取文件窗口搜素文件的目录
    fn = filedialog.askdirectory()
    print(fn)
    # 遍历目录下的所有文件
    fn_list = os.walk(fn)
    for root_path, dirs, files in fn_list:
        # root_path 根目录 中间目录 所有的文件列表
        # 根目录 + 文件列表里面的文件
        # print(root_path,dirs,files)
        # 只要获取所有的文件就可以了
        for file in files:
            if file.endswith(file_type):
                print(root_path + '\\' + file)
                # 只需要指定的文件类型
                list_box.insert(tk.END, root_path + '\\' + file)


# 点击按钮获取输入数据的内容
search_button.config(command=search)
# 然后调用文件管理器搜索文件

# 滚动栏
sb = tk.Scrollbar(root)
sb.pack(side=tk.RIGHT, fill=tk.Y)
# 设置 Test 文本框
list_box.config(yscrollcommand=sb.set)
sb.config(command=list_box.yview)

def list_box_click(event):
    print('列表盒子被点击了')
    # 获取列表盒子被选中的内容
    index= list_box.curselection()[0]
    file_path = list_box.get(index)
    print(file_path)
    # 得到路径之后，然后将内容显示到新的窗口
    top = tk.Toplevel()
    top.title("查看内容")
    content = open(file_path,mode='r',encoding='utf-8').read()
    text = tk.Text(top)
    text.pack(side=tk.LEFT)
    # 窗口大小
    text.insert(tk.END,content)
    # 滚动栏
    sb = tk.Scrollbar(top)
    sb.pack(side=tk.RIGHT, fill=tk.Y)
    # 设置 Test 文本框
    text.config(yscrollcommand=sb.set)
    sb.config(command=text.yview)


# 当列表盒子被点击的时候，弹出新的窗口
list_box.bind('<Double-Button-1>',list_box_click)
root.mainloop()
